试试搜索一下吧

Easy-Es 2.1.0-easysearch 版本发布

EasysearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 88 次浏览 • 10 小时前 • 来自相关话题

![](https://infinilabs.cn/img/blog ... er.png)

01 | 版本更新概述


经过极限科技与 Dromara 开源社区下 Easy-Es 项目的紧密合作与共同努力,我们很荣幸地联合推出 Easy-Es 2.1.0-easysearch 版本!

作为双方携手打造的第一个合作成果,本版本已正式发布:

  • 源码仓库:<https://gitee.com/dromara/easy ... gt%3B
  • Maven 依赖:<https://mvnrepository.com/arti ... gt%3B

    本次更新的核心内容是将 Easy-Es 框架底层增加兼容极限科技自主研发的 Easysearch 搜索引擎,这标志着国产搜索引擎与国内优秀开源项目深度融合的重要里程碑,是极限科技与 Dromara 社区携手共建国产技术生态的创新实践。

    02 | 迁移至 Easysearch 的背景与优势


    随着国内对自主可控技术需求的日益增长,特别是在基础设施软件领域,企业对于信创合规的要求不断提升。极限科技自主研发的 Easysearch 搜索引擎具备以下显著优势:

  • 国产化自主可控:完全自主研发,符合信创要求,无许可证风险,为企业提供安全可靠的技术保障
  • 轻量级架构:相比传统搜索引擎,资源占用更少,启动更快速,显著降低企业运维成本
  • 卓越性能表现:查询性能优异,能够满足大部分业务场景需求,用户体验流畅
  • 良好兼容性:与 Elasticsearch 的 API 接口基本兼容,迁移成本较低,保护用户现有投资

    基于以上优势,双方决定共同将 Easy-Es 框架底层迁移至 Easysearch,这不仅为用户提供更多选择,更是双方携手推动国产搜索引擎生态建设的重要举措。

    03 | Easy-Es 框架优势


    Easy-Es 框架在搜索开发领域具备以下核心优势:

    1. 极简代码开发:相比原生 API 可减少 50%-80% 的代码量,大幅提升开发效率。

      java<br /> // 使用 Easy-Es 仅需一行代码完成查询<br /> List<Document> documents = documentMapper.selectList(<br /> EsWrappers.lambdaQuery(Document.class).eq(Document::getTitle, "测试")<br /> );<br />

    2. 自动索引管理
      框架提供全自动智能索引托管功能,开发者无需关心索引的创建、更新及数据迁移等复杂操作,索引全生命周期由框架自动管理,过程零停机。

    3. SQL 语法兼容
      支持使用 MySQL 语法完成搜索查询操作,无需学习复杂的 DSL 语句。支持 and、or、like、in 等常用 SQL 语法。

    4. Lambda 表达式支持
      采用 Lambda 风格编程,提供类型安全的字段访问,避免手动输入字段名可能产生的错误,提升代码可读性和开发效率。

    5. 无缝 Spring Boot 集成
      与 Spring Boot 生态深度集成,提供开箱即用的自动配置,无需复杂的手动配置,支持 Spring Boot Actuator 监控,完美融入企业级应用架构。

    6. 丰富的查询功能
      支持复杂的嵌套查询、聚合查询、范围查询、高亮显示等高级搜索功能,同时保持 API 的简洁易用,满足各种业务场景需求。

    7. 分布式架构支持
      完美适配 Easysearch 的分布式特性,支持集群模式部署,具备高可用性和横向扩展能力,满足企业级大规模数据处理需求。

    8. 成熟稳定的国产 ORM 框架
      作为 Dromara 开源社区下的顶级开源项目,Easy-Es 已在国内众多企业和项目中得到广泛应用和验证,拥有活跃的中文社区和完善的文档支持,为企业级应用提供了可靠的技术保障。

      04 | 快速上手示例


      1. 添加依赖


      根据您使用的构建工具,选择对应的配置方式:

      Maven 项目


      pom.xml 配置

      ```xml


      11
      11
      2.7.0
      UTF-8





      org.springframework.boot
      spring-boot-dependencies
      ${spring-boot.version}
      pom
      import






      org.dromara.easy-es
      easy-es-boot-starter
      2.1.0-easysearch


      org.springframework.boot
      spring-boot-starter-web






      org.springframework.boot
      spring-boot-maven-plugin
      ${spring-boot.version}



      repackage






      ```

      **Maven 启动命令**:

      ```bash
      # 运行应用
      mvn spring-boot:run

      # 编译打包
      mvn clean package
      ```

      #### Gradle 项目

      **build.gradle 配置**:

      ```gradle
      plugins {
      id 'java'
      id 'org.springframework.boot' version '2.7.0'
      id 'io.spring.dependency-management' version '1.0.11.RELEASE'
      }

      group = 'org.easysearch'
      version = '1.0-SNAPSHOT'
      sourceCompatibility = '11'

      repositories {
      mavenLocal()
      mavenCentral()
      }

      dependencies {
      implementation 'org.dromara.easy-es:easy-es-boot-starter:2.1.0-easysearch'
      implementation 'org.springframework.boot:spring-boot-starter-web'
      }
      ```

      **Gradle 启动命令**:

      ```bash
      # 运行应用
      ./gradlew bootRun

      # 编译打包
      ./gradlew clean build
      ```

      ### 2. 配置文件设置

      **application.yml**(根据实际 Easysearch 部署情况修改):

      ```yaml
      easy-es:
      enable: true
      # Easysearch 服务地址
      address: localhost:9200
      # 协议:http 或 https
      schema: https
      # Easysearch 用户名
      username: admin
      # Easysearch 密码
      password: your_password_here
      # 连接保持时间(毫秒)
      keep-alive-millis: 18000

      global-config:
      # 开启彩蛋模式(启动时显示 ASCII 艺术图案)
      i-kun-mode: true
      # 索引处理模式:smoothly 表示平滑模式(零停机更新索引)
      process-index-mode: smoothly
      # 异步处理索引时是否阻塞
      async-process-index-blocking: true
      # 是否打印 DSL 语句(开发调试时可设为 true)
      print-dsl: false
      db-config:
      # 下划线转驼峰
      map-underscore-to-camel-case: true
      # 索引前缀
      index-prefix: dev_
      # 主键类型:customize 表示自定义
      id-type: customize
      # 字段更新策略:not_empty 表示非空时才更新
      field-strategy: not_empty
      # 刷新策略:immediate 表示立即刷新
      refresh-policy: immediate
      # 开启追踪总命中数
      enable-track-total-hits: true
      ```

      ### 3. 实体类定义

      ```java
      package org.dromara.easyes.sample.entity;

      import lombok.Data;
      import lombok.experimental.Accessors;
      import org.dromara.easyes.annotation.HighLight;
      import org.dromara.easyes.annotation.IndexField;
      import org.dromara.easyes.annotation.IndexId;
      import org.dromara.easyes.annotation.IndexName;
      import org.dromara.easyes.annotation.Settings;
      import org.dromara.easyes.annotation.rely.Analyzer;
      import org.dromara.easyes.annotation.rely.FieldStrategy;
      import org.dromara.easyes.annotation.rely.FieldType;
      import org.dromara.easyes.annotation.rely.IdType;

      import java.time.LocalDateTime;

      /**
      * es 数据模型
      */
      @Data
      @Accessors(chain = true)
      @Settings(shardsNum = 3, replicasNum = 2)
      @IndexName(value = "easyes_document", keepGlobalPrefix = true)
      public class Document {
      /**
      * es 中的唯一 id
      */
      @IndexId(type = IdType.CUSTOMIZE)
      private String id;

      /**
      * 文档标题,默认为 keyword 类型,可进行精确查询
      */
      private String title;

      /**
      * 文档内容,指定为 TEXT 类型,使用 IK 分词器
      * 支持高亮显示,高亮结果映射到 highlightContent 字段
      */
      @HighLight(mappingField = "highlightContent")
      @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART)
      private String content;

      /**
      * 创建者,字段策略为非空时才更新
      */
      @IndexField(strategy = FieldStrategy.NOT_EMPTY)
      private String creator;

      /**
      * 创建时间
      */
      @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss")
      private LocalDateTime gmtCreate;

      /**
      * 高亮返回值被映射的字段
      */
      private String highlightContent;

      /**
      * 文档点赞数
      */
      private Integer starNum;

      /**
      * 地理位置经纬度坐标,例如: "40.13933715136454,116.63441990026217"
      */
      @IndexField(fieldType = FieldType.GEO_POINT)
      private String location;
      }
      ```

      ### 4. Mapper 接口

      ```java
      package org.dromara.easyes.sample.mapper;

      import org.dromara.easyes.core.kernel.BaseEsMapper;
      import org.dromara.easyes.sample.entity.Document;

      /**
      * Mapper 接口,继承 BaseEsMapper 即可获得所有 CRUD 方法
      */
      public interface DocumentMapper extends BaseEsMapper {
      }
      ```

      ### 5. 启动类配置

      ```java
      package org.dromara.easyes.sample;

      import org.dromara.easyes.spring.annotation.EsMapperScan;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;

      /**
      * 启动类
      */
      @SpringBootApplication
      @EsMapperScan("org.dromara.easyes.sample.mapper")
      public class EasyEsApplication {
      public static void main(String[] args) {
      SpringApplication.run(EasyEsApplication.class, args);
      }
      }
      ```

      ### 6. 业务使用示例

      ```java
      package org.dromara.easyes.sample.controller;

      import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
      import org.dromara.easyes.sample.entity.Document;
      import org.dromara.easyes.sample.mapper.DocumentMapper;
      import org.easysearch.action.search.SearchResponse;
      import org.easysearch.search.aggregations.Aggregations;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.bind.annotation.RestController;

      import javax.annotation.Resource;
      import java.time.LocalDateTime;
      import java.util.List;

      @RestController
      public class SampleController {

      @Resource
      private DocumentMapper documentMapper;

      /**
      * 初始化插入数据
      */
      @GetMapping("/insert")
      public Integer insert() {
      int count = 0;
      // 插入 5 条测试数据
      for (int i = 1; i <= 5; i++) {
      Document document = new Document();
      document.setId(String.valueOf(i));
      document.setTitle("测试" + i);
      document.setContent("测试内容" + i);
      document.setCreator("创建者" + i);
      document.setGmtCreate(LocalDateTime.now());
      document.setStarNum(i * 10);
      count += documentMapper.insert(document);
      }
      return count;
      }

      /**
      * 根据标题精确查询
      */
      @GetMapping("/listDocumentByTitle")
      public List listDocumentByTitle(@RequestParam String title) {
      LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>();
      wrapper.eq(Document::getTitle, title);
      return documentMapper.selectList(wrapper);
      }

      /**
      * 高亮搜索
      */
      @GetMapping("/highlightSearch")
      public List highlightSearch(@RequestParam String content) {
      LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>();
      wrapper.match(Document::getContent, content);
      return documentMapper.selectList(wrapper);
      }

      /**
      * 查询所有数据
      */
      @GetMapping("/selectAll")
      public List selectAll() {
      LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>();
      return documentMapper.selectList(wrapper);
      }

      /**
      * 聚合查询 - 按创建时间和点赞数分组统计
      */
      @GetMapping("/aggByDateAndStar")
      public Aggregations aggByDateAndStar() {
      LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>();
      wrapper.groupBy(Document::getGmtCreate)
      .max(Document::getStarNum)
      .min(Document::getStarNum);
      SearchResponse response = documentMapper.search(wrapper);
      return response.getAggregations();
      }

      /**
      * 使用 SQL 语句查询文档
      */
      @GetMapping("/queryBySQL")
      public String queryBySQL(@RequestParam(required = false) String title) {
      String sql;
      if (title != null && !title.isEmpty()) {
      sql = String.format("SELECT * FROM dev_easyes_document WHERE title = '%s'", title);
      } else {
      sql = "SELECT * FROM dev_easyes_document LIMIT 10";
      }
      return documentMapper.executeSQL(sql);
      }
      }
      ```

      ### 7. 快速测试

      启动应用后,可以通过以下接口测试:

      ```bash
      # 1. 插入测试数据
      curl http://localhost:8080/insert

      # 2. 查询所有数据
      curl http://localhost:8080/selectAll

      # 3. 根据标题精确查询
      curl "http://localhost:8080/listDocumentByTitle?title=测试1"

      # 4. 高亮搜索
      curl "http://localhost:8080/highlightSearch?content=测试"

      # 5. SQL 查询
      curl "http://localhost:8080/queryBySQL?title=测试1"

      # 6. 聚合查询
      curl http://localhost:8080/aggByDateAndStar
      ```

      ## 05 | 相关链接

  • Easy-Es 官方网站:<https://easy-es.cn>;
  • Gitee 仓库:<https://gitee.com/dromara/easy-es>;
  • GitHub 仓库:<https://github.com/dromara/easy-es>;
  • Easysearch 官方网站:<https://infinilabs.cn/products/easysearch>;

    06 | 特别致谢


    在此,极限科技要特别感谢 Easy-Es 项目的核心开发者“老汉”和各位贡献者和维护者们。正是因为有了你们的辛勤付出、专业精神以及对开源事业的热忱奉献,Easy-Es 项目才能在国内外获得如此广泛的认可和应用。

    也感谢你们对国产技术生态建设的信任与支持。此次 Easy-Es 与 Easysearch 的深度整合,正是双方通力合作、互利共赢的最佳体现。

    我们相信,在 Easy-Es 项目团队的持续推动下,国产开源软件必将迎来更加辉煌的明天。极限科技将继续致力于提供优质的国产技术解决方案,与 Easy-Es 项目团队携手共进,为中国开源生态的发展贡献更多力量!


    ---

    关于 Easy-Es


    Easy-Es(简称 EE)是一款基于 Elasticsearch(简称 ES)官方提供的 ElasticsearchClient 打造的 ORM 开发框架,在 ElasticsearchClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过 Mybatis-Plus(简称 MP),那么您基本可以零学习成本直接上手 EE,EE 是 MP 的 ES 平替版,在有些方面甚至比 MP 更简单,同时也融入了更多 ES 独有的功能,助力您快速实现各种场景的开发。

    官网:<https://www.easy-es.cn>;

    Easy-Es for Easysearch 是一款简化 Easysearch 国产化搜索引擎操作的开源框架,全自动智能索引托管。同时也是国内首家专门针对 Easysearch 客户端简化的工具。它简化 CRUD 及其它高阶操作,可以更好的帮助开发者减轻开发负担。底层采用 Easysearch Java Client,保证其原生性能及拓展性。

    项目地址:<https://gitee.com/dromara/easy ... gt%3B

    关于极限科技


    极限科技(全称:极限数据(北京)科技有限公司)是一家专注于实时搜索与数据分析的软件公司。

    旗下品牌:极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验,为用户提供安全、稳定、高性能的国产搜索解决方案。

    官网:<https://infinilabs.cn>;

    作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。

【搜索客社区日报】第2162期 (2025-12-15)

社区日报Muses 发表了文章 • 0 个评论 • 161 次浏览 • 17 小时前 • 来自相关话题

1、AutoOps 实际应用:调查 ECK 上的 Elasticsearch 集群性能
https://elasticstack.blog.csdn ... 66556

2、使用 Elastic Observability 排查你的 Agents 和 Amazon Bedrock AgentCore
https://elasticstack.blog.csdn ... 81416

3、如何通过个性化、分群感知排序来提升电商搜索相关性
https://elasticstack.blog.csdn ... 98807

4、Streams 处理:告别 Grok 的困扰 - 在 Streams 中解析你的日志
https://elasticstack.blog.csdn ... 38851

5、Elasticsearch:使用判断列表评估搜索查询相关性
https://elasticstack.blog.csdn ... 36745

编辑:Muse
更多资讯:http://news.searchkit.cn

APM(一): Skywalking 与 Easyearch 集成

EasysearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 1318 次浏览 • 3 天前 • 来自相关话题


概述


SkyWalking 是一个开源的可观测性平台,用于收集、分析、聚合和可视化服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法,即使在云之间也能保持对分布式系统的清晰视图。它是一个现代的 APM,专门为云原生、基于容器的分布式系统设计。

SkyWalking 涵盖了云原生世界中所有的可观测性需求,包括:

  • Tracing: SkyWalking 原生数据格式,以及 v1 和 v2 格式的 Zipkin 跟踪都得到支持。
  • Metrics: SkyWalking 支持成熟的指标格式,包括原生计量格式、OTEL 指标格式和 Telegraf 格式。SkyWalking 与服务网格平台(通常为 Istio 和 Envoy)集成,将可观测性构建到数据平面或控制平面。此外,SkyWalking 原生代理可以在指标模式下运行,从而显著提升性能。
  • Logging: 包括从磁盘收集或通过网络收集的日志。原生代理可以自动将追踪上下文与日志绑定,或使用 SkyWalking 通过文本内容绑定追踪和日志。
  • Profiling: Profiling 是一种强大的工具,帮助开发者从代码行角度理解应用程序的性能。SkyWalking 提供了内置于原生语言代理和独立的 eBPF 代理的剖析功能。
  • Event: 事件是一种特殊类型的数据,用于记录系统中的重要时刻,例如版本升级、配置变更等。将事件与指标关联有助于解释指标中的峰值或谷值,将事件与追踪和日志关联有助于排查根本原因。

    更详细的信息请大家移步 [Skywalking](https://skywalking.apache.org/) 官方网站。

    测试环境


    本篇使用的 Skywalking 版本是 10.2.0 ,需要 Java 11/17/21。

    [Easyearch](https://easysearch.cn) 使用的版本是 1.14.1,需要开启 Elastic 兼容模式,具体操作参考[文档](https://infinilabs.cn/blog/202 ... earch/) 。

    生成 Java 密钥库文件


    使用如下命令将 Easysearch 的 CA 证书(ca.crt)导入到一个新的 Java 密钥库文件(es_keystore.jks)中,以便 SkyWalking 能够信任由该 CA 颁发的所有证书。生产环境中使用请替换命令中的密码。

    plain<br /> keytool -import -v -trustcacerts -file ca.crt -keystore es_keystore.jks -keypass changeit -storepass changeit<br />

    修改配置文件


    SkyWalking 后端服务配置文件为 config/application.yml,这也是与 Easyearch 集成时需要修改的文件。Skywalking 与 Easyearch 集成有两种通信方式:http 或 https。http 方式非常简单,留给大家自行探索。本篇采用 https 方式,这也是 Easysearch 初始化后默认对外服务的协议。

    拷贝上面生成的密钥库文件到 Skywalking 的 home 目录下,修改 application.yml 的 storage 部分

    ```plain
    storage:
    selector: ${SW_STORAGE:elasticsearch}
    banyandb:

    Since 10.2.0, the banyandb configuration is separated to an independent configuration file: bydb.yaml.

    elasticsearch:
    namespace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:es1.infini.cloud:9200}
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"https"}
    connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}
    socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
    responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}
    numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}
    user: ${SW_ES_USER:"admin"}
    password: ${SW_ES_PASSWORD:"infiniyyds@2025"}
    trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
    trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:"changeit"}
    ```

    注意 clusterNodes 配置的是域名,需要在 Skywalking 的主机上用 /etc/hosts 解析成具体的地址,如果有多个 Easysearch 节点,可以用逗号分隔。

    启动


    确保 Easysearch 启动完毕后,再启动 Skywalking。正常启动完成后,可访问 Skywalking 服务页面,默认端口 8080。

    ![](https://infinilabs.cn/img/blog ... /1.png)

    正常连接后,Skywalking 会在 Easysearch 中创建很多 sw 开头的索引。

    ![](https://infinilabs.cn/img/blog ... /2.png)

    OK,服务集成就到此完毕,后续我们将探索更多的 APM 内容。

    关于 Easysearch


    ![](https://infinilabs.cn/img/blog ... er.png)

    INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

    官网文档:<https://docs.infinilabs.com/easysearch>;

    作者:杨帆,极限科技(INFINI Labs)高级解决方案架构师、《老杨玩搜索》栏目 B 站 UP 主,拥有十余年金融行业服务工作经验,熟悉 Linux、数据库、网络等领域。目前主要从事 Easysearch、Elasticsearch 等搜索引擎的技术支持工作,服务国内私有化部署的客户。

【搜索客社区日报】第2161期 (2025-12-09)

社区日报God_lockin 发表了文章 • 0 个评论 • 2747 次浏览 • 6 天前 • 来自相关话题

1. 分析了300万个泄露了的数据库之后,你需要知道这些(需要梯子)
https://netlas.medium.com/i-an ... 3b09f

2. 拿DS、ollama和ES手搓一个本地RAG吧(需要梯子)
https://somesh-rokz.medium.com ... fa1be

3. 规避掉ES的query错误,我们做对了什么(需要梯子)
https://medium.com/%40stephane ... 550b8

编辑:斯蒂文
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2160期 (2025-12-08)

社区日报Muses 发表了文章 • 0 个评论 • 2843 次浏览 • 2025-12-08 15:47 • 来自相关话题

1、使用 LangGraph.js 和 Elasticsearch 构建一个金融 AI 搜索工作流
https://elasticstack.blog.csdn ... 29259

2、先分块再向量化已经过时!先embedding再chunking才是王道
https://mp.weixin.qq.com/s/-CKRG3GmvoDvpN4Mu3KNjQ

3、EDB EPAS通过postgresql连接器同步数据到Elasticsearch
https://mp.weixin.qq.com/s/828gKsVR3nHFsJAv-45m9g

4、从硅谷杀出来一个彻底开源的AI记忆系统,是真的优雅!
https://mp.weixin.qq.com/s/gwKIX2sWxl1hSg_UFmkljg

5、AI出码率70%+的背后:高德团队如何实现AI研发效率的量化与优化
https://mp.weixin.qq.com/s/VXfNZM-jns-VrgLvtQj1Tg

编辑:Muse
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2159期 (2025-12-05)

社区日报Fred2000 发表了文章 • 0 个评论 • 5999 次浏览 • 2025-12-05 10:53 • 来自相关话题

1、Easysearch 2.0.0 性能测试
https://infinilabs.cn/blog/202 ... ents/

2、60 亿+ 条 Elasticsearch 数据泄漏事件引起的反思
https://mp.weixin.qq.com/s/qWrF7UiY7PulGBz4v9zcDg

3、Easysearch 跨集群复制(CCR)实战全攻略之 1——本地两集群间复制
https://mp.weixin.qq.com/s/wxB0fH7GHZGspKB9Rp7gtg

4、Easysearch 跨集群复制 CCR 完全实战指南之2 —— 自动跟随神器介绍
https://mp.weixin.qq.com/s/BzwUFL33Rs9qM1a50BfEhQ

编辑:Fred
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2158期 (2025-12-04)

社区日报Se7en 发表了文章 • 0 个评论 • 4483 次浏览 • 2025-12-04 10:03 • 来自相关话题

1.Jina AI创业复盘:AI团队的Scaling Law是什么
https://mp.weixin.qq.com/s/tXA ... e%3D1
2.告别 N-gram 调参:解密vLLM里的SuffixDecoding功能
https://mp.weixin.qq.com/s/92cY1er-sbRD38OtRbfwVg
3.Agent RFT 深度解析:如何让 AI 智能体自我进化
https://mp.weixin.qq.com/s/9ylgBXS28l-HO3soY8ytMA

编辑:Se7en
更多资讯:http://news.searchkit.cn

Easysearch 2.0.0 性能测试

EasysearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 5969 次浏览 • 2025-12-04 00:17 • 来自相关话题


概述


Easysearch 2.0.0 正式版带来了显著的性能提升和优化改进。通过与上一个稳定版本 1.15.6 的全面对比测试,我们使用 esrally 基准测试工具在 append-no-conflicts 场景下进行了深入的性能评估。测试结果表明,2.0.0 版本在索引性能、查询延迟、内存管理等核心指标上都实现了突破性改进。

核心性能提升


1. 索引性能更加稳定


写入效率提升 12.81%

Easysearch 2.0.0 索引性能表现更加稳定:

  • 累计索引 CPU 时间(所有主分片):从 225.1 分钟缩短至 196.3 分钟,减少 28.8 分钟(-12.81%
  • 索引吞吐量
    • 平均吞吐量从 180,868 docs/s 提升至 190,712 docs/s(+5.44%
    • 最大吞吐量从 198,184 docs/s 提升至 220,460 docs/s(+11.24%
    • 最小吞吐量从 164,263 docs/s 提升至 178,961 docs/s(+8.95%

      累计索引 CPU 时间的减少,表明 2.0.0 版本在索引操作上更加高效,CPU 利用率更优。这意味着在相同硬件条件下,Easysearch 2.0.0 能够更快地完成数据摄入任务,对于需要处理大规模数据写入的场景具有重要意义。


      Indexing Throughput (docs/s) - Higher is Better



      v1.15.6


      180,868




      v2.0.0


      190,712





      ### 2. Refresh 和 Flush 耗时缩短

      **Refresh 和 Flush 性能大幅改善**

      在 Elasticsearch/Easysearch 中,Refresh 和 Flush 操作对写入性能有直接影响。2.0.0 版本在这两个关键操作上实现了重大优化:

      #### Refresh 性能提升 54.46%

  • 累计刷新时间:从 9.14 分钟降至 4.16 分钟
  • 中位刷新时间:减少 61.86%(从 0.133 分钟降至 0.051 分钟)
  • 最大刷新时间:减少 65.62%(从 1.12 分钟降至 0.39 分钟)

    Flush 性能提升 40%


  • 累计刷盘时间:从 12.57 分钟降至 7.54 分钟
  • 中位刷盘时间:减少 57.57%
  • 最大刷盘时间:减少 31.93%


    Cumulative Refresh Time (min) - Lower is Better



    v1.15.6


    9.14 min




    v2.0.0


    4.16 min






    Cumulative Flush Time (min) - Lower is Better



    v1.15.6


    12.57 min




    v2.0.0


    7.54 min





    这些优化使得 Easysearch 2.0.0 能够更高效地将数据持久化到磁盘,同时减少对写入操作的阻塞。

    ### 3. 垃圾回收(GC)性能优化

    **GC 效率显著提升**

  • Young GC 次数:从 525 次降至 426 次,减少 18.86%
  • Young GC 时间:从 16.547 秒降至 15.985 秒,减少 3.40%
  • Old GC:两个版本均无 Old GC 发生,内存管理健康

    更少的 GC 次数意味着:

  • 应用程序 STW(Stop-The-World)暂停更少
  • 更稳定的查询响应时间
  • 更好的系统吞吐量

    查询性能提升


    1. 基础查询延迟降低


    多类型查询性能全面提升

    | 查询类型 | 延迟指标 | 改进幅度 |
    | ---------------- | ------------ | -------------------------------- |
    | Default 查询 | 50 分位延迟 | -11.40% (19.97ms → 17.69ms) |
    | | 99 分位延迟 | -15.23% (25.66ms → 21.75ms) |
    | Term 查询 | 50 分位延迟 | -19.88% (4049ms → 3244ms) |
    | | 90 分位延迟 | -18.73% (4137ms → 3362ms) |
    | Range 查询 | 50 分位延迟 | -31.71% (42.19ms → 28.81ms) |
    | | 100 分位延迟 | -64.68% (111.42ms → 39.35ms) |


    Query Latency Improvements (ms) - Lower is Better




    Default Query (50th percentile)


    v1.15.6


    19.97ms




    v2.0.0


    17.69ms






    Term Query (50th percentile)


    v1.15.6


    4049ms




    v2.0.0


    3244ms






    Range Query (50th percentile)


    v1.15.6


    42.19ms




    v2.0.0


    28.81ms






    ### 2. 排序查询性能飞跃

    **时间戳排序查询优化高达 97%**

    Easysearch 2.0.0 在排序查询场景下实现了令人瞩目的性能突破:

    #### 降序排序(desc_sort_timestamp)

  • 50 分位延迟:从 516.07ms 降至 98.89ms(-80.84%
  • 90 分位延迟:从 544.84ms 降至 123.59ms(-77.32%
  • 99 分位延迟:从 603.14ms 降至 139.93ms(-76.80%

    升序排序 + After 分页(asc_sort_with_after_timestamp)


  • 50 分位延迟:从 1272.58ms 降至 33.56ms(-97.36%
  • 90 分位延迟:从 1386.92ms 降至 37.25ms(-97.31%
  • 99 分位延迟:从 1474.98ms 降至 38.11ms(-97.42%


    Sort Query Latency (ms) - Lower is Better




    Desc Sort


    v1.15.6


    516ms




    v2.0.0


    99ms






    Asc Sort + After


    v1.15.6


    1272ms




    v2.0.0


     33ms






    #### Force Merge 后的排序查询

    在强制合并为单段后,排序查询性能更加出色:

    **降序排序(force-merge-1-seg)**

  • 50 分位延迟:从 131,617ms 降至 115.01ms(-99.91%
  • 这一改进相当于从 2 分钟以上降至 0.1 秒!

    升序 + After 分页(force-merge-1-seg)

  • 50 分位延迟:从 1387.01ms 降至 132.42ms(-90.45%
  • 90 分位延迟:从 1509.03ms 降至 159.05ms(-89.46%

    3. 聚合查询性能提升


    hourly_agg 聚合查询优化

  • 50 分位延迟:从 4192.57ms 降至 3866.07ms(-7.79%
  • 90 分位延迟:从 4303.51ms 降至 4053.80ms(-5.80%
  • 99 分位延迟:从 4475.32ms 降至 4269.91ms(-4.59%

    4. Scroll 查询性能改进


    大数据量遍历场景优化

  • 50 分位延迟:从 6511.65ms 降至 4623.87ms(-28.99%
  • 90 分位延迟:从 6881.70ms 降至 5972.79ms(-13.21%
  • 平均吞吐量:从 24.192 pages/s 提升至 24.485 pages/s(+1.21%


    Scroll Query Latency (ms) - Lower is Better




    50th Percentile


    v1.15.6


    6511.65ms




    v2.0.0


    4623.87ms






    90th Percentile


    v1.15.6


    6881.70ms




    v2.0.0


    5972.79ms






    ### 5. 高百分位延迟大幅改善

    **极端场景下的稳定性提升**

    在衡量系统稳定性的高百分位延迟指标上,2.0.0 版本表现卓越:

    | 场景 | 99.9 分位延迟改进 | 99.99 分位延迟改进 | 100 分位延迟改进 |
    | ---------------- | ----------------- | ------------------ | ------------------ |
    | **index-append** | **-43.40%** | **-65.35%** | **-70.91%** |
    | | (3364ms → 1904ms) | (9618ms → 3333ms) | (13427ms → 3906ms) |

    这意味着即使在最坏的情况下,2.0.0 版本也能提供更加稳定和可预测的性能表现。

    ## 范围查询性能提升

    **200s-in-range 和 400s-in-range 查询优化**

  • 200s-in-range

    • 50 分位延迟降低 15.60%
    • 吞吐量提升 1.20%

  • 400s-in-range
    • 50 分位延迟降低 8.44%
    • 吞吐量提升 0.23%

      存储优化


      磁盘空间使用更高效

  • 存储大小:从 19.51 GB 降至 19.14 GB(-1.93%
  • 段数量:从 43 个增至 50 个(+16.28%)

    虽然段数量略有增加,但总存储空间仍然减少,说明数据压缩和存储效率得到了提升。

    Merge 策略调整


    合并操作的权衡

    需要注意的是,2.0.0 版本在 Merge 方面有以下变化:

  • Merge 次数从 184 次增至 192 次(+4.35%)
  • Merge 限流时间从 9.53 分钟增至 11.17 分钟(+17.20%

    这是为了平衡写入性能和查询性能所做的策略调整。用户可以根据实际场景需求,通过以下参数进行优化:

    json<br /> {<br /> "index.merge.scheduler.max_thread_count": "1",<br /> "index.merge.policy.max_merged_segment": "5gb"<br /> }<br />

    技术架构改进


    1. 段数据结构优化


    通过将段元数据从堆内存迁移到堆外内存,Easysearch 2.0.0 实现了:

  • 更低的 JVM 堆压力
  • 更少的 GC 频率
  • 更稳定的内存使用模式
  • 更好的大数据集支持能力

    2. 查询缓存优化


    排序查询性能的巨大提升表明 2.0.0 版本可能在以下方面进行了优化:

  • 改进的 Doc Values 访问机制
  • 优化的排序算法
  • 更高效的分页实现
  • 智能的查询结果缓存

    3. I/O 优化


    Refresh 和 Flush 时间的大幅减少说明:

  • 改进了磁盘 I/O 调度策略
  • 优化了文件系统操作
  • 可能引入了更高效的批量写入机制

    适用场景


    Easysearch 2.0.0 的性能提升使其在以下场景中表现更加出色:

    1. 大规模日志与事件流处理


  • 更高的写入吞吐量(+11.24% 峰值)
  • 更低的索引延迟
  • 适合 APM、日志分析、安全监控等场景

    2. 时序数据存储与分析


  • 时间戳排序查询性能提升高达 97%
  • 适合 IoT、监控指标、金融交易数据等场景

    3. 全文搜索应用


  • 多类型查询延迟降低 10-30%
  • 高并发场景下更稳定的响应时间
  • 适合电商搜索、内容管理系统等场景

    4. 实时分析与 Dashboard


  • 聚合查询性能提升 5-8%
  • 更低的极端延迟,用户体验更好
  • 适合实时报表、业务 BI 等场景

    5. 大数据量遍历与导出


  • Scroll 查询延迟降低 29%
  • 适合数据迁移、全量导出等场景

    升级建议


    兼容性


    Easysearch 2.0.0 与 1.15.6 在 API 层面保持兼容,但建议:

    1. 测试环境验证:先在测试环境进行充分验证
    2. 配置审查:检查 Merge 相关配置是否需要调整
    3. 监控指标:升级后密切关注 GC、内存、延迟等指标
    4. 滚动升级:生产环境建议采用滚动升级方式

      性能测试环境


      本次测试使用 esrally 基准测试工具,测试配置如下:

  • 测试场景:append-no-conflicts
  • 测试时间
    • Baseline (1.15.6): 2025-11-14
    • Contender (2.0.0): 2025-11-21
  • 部署方式:External(独立部署)
  • CPU 绑定:使用 taskset 绑定 Easysearch 进程 0 到 15 cpu
  • JVM 配置-Xms16g -Xmx16g

    总结


    Easysearch 2.0.0 版本在性能方面取得了全面提升:

  • 索引性能提升 12.81%
  • 查询延迟降低 10-97%(不同场景)
  • 内存使用优化 100%(堆内段数据)
  • GC 频率降低 18.86%
  • Refresh 性能提升 54.46%
  • Flush 性能提升 40%
  • 高百分位延迟改善 43-70%

    这些改进使得 Easysearch 2.0.0 成为一个更加高效、稳定和可靠的搜索与分析引擎,特别适合处理大规模数据和实时查询场景。无论是日志分析、时序数据处理,还是全文搜索应用,2.0.0 版本都能提供更优秀的性能表现。

    我们强烈建议用户升级到 Easysearch 2.0.0,以获得这些显著的性能提升和更好的使用体验。

    ---

    关于 Easysearch

    ![](https://infinilabs.cn/img/blog ... er.png)

    INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

  • 官网: https://easysearch.cn
  • 文档: https://docs.infinilabs.com/easysearch/main

    作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。
    原文:https://infinilabs.cn/blog/202 ... ents/

【搜索客社区日报】第2157期 (2025-12-03)

社区日报kin122 发表了文章 • 0 个评论 • 4738 次浏览 • 2025-12-03 15:00 • 来自相关话题

1. 使用 LangChain 和 Elasticsearch 开发一个 agentic RAG 助手
https://elasticstack.blog.csdn ... 74725

2. 混合搜索无需头疼:使用 retrievers 简化混合搜索
https://elasticstack.blog.csdn ... 35155

3. 理解智能体人工智能的知识图谱(搭梯)
https://medium.com/%40shilpath ... 8387b

编辑:kin122 
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2156期 (2025-12-02)

社区日报God_lockin 发表了文章 • 0 个评论 • 5394 次浏览 • 2025-12-02 08:21 • 来自相关话题

1. 用 AI 解锁你搜索服务的潜能(需要梯子)
https://medium.com/pickme-engi ... 46a9d

2. 手搓一个搜索引擎难吗?(需要梯子)
https://karboosx.net/post/4eZx ... works

3. 把ES的数据导到qdrant,现在会了吧(需要梯子)
https://pub.towardsai.net/how- ... ad1b8

编辑:斯蒂文
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2151期 (2025-11-25)

社区日报God_lockin 发表了文章 • 0 个评论 • 7335 次浏览 • 2025-12-01 20:24 • 来自相关话题

1. Elastic SIEM 这么强的安全实验室还要啥自行车(需要梯子)
https://medium.com/%40securenu ... f92b5

2. 5分钟就给你搜索引擎拉起来了,信不信?(需要梯子)
https://medium.com/%40abel.ncm ... 05a61

3. 日志平台大掰头,这次你站谁?(需要梯子)
https://medium.com/%40rostisla ... 1379b

编辑:斯蒂文
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2155期 (2025-12-01)

社区日报Muses 发表了文章 • 0 个评论 • 5575 次浏览 • 2025-12-01 10:25 • 来自相关话题

1、使用 Elastic Agent Builder 和 GPT-OSS 构建一个用于 HR 的 AI agent
https://elasticstack.blog.csdn ... 94401

2、混合搜索无需头疼:使用 retrievers 简化混合搜索
https://elasticstack.blog.csdn ... 35155

3、使用 LangChain 和 Elasticsearch 开发一个 agentic RAG 助手
https://elasticstack.blog.csdn ... 74725

4、Easysearch Python 客户端企业级实战——从 0 到 1 解决兼容性与连接难题
https://mp.weixin.qq.com/s/FnRUYVW_JEKerEAE1cJWlg

5、Structured RAG:解决传统 RAG 的准确性盲区
https://mp.weixin.qq.com/s/VsUgOdKl3PJSmqFhHnhReA

编辑:Muse
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2154期 (2025-11-28)

社区日报Fred2000 发表了文章 • 0 个评论 • 8737 次浏览 • 2025-11-28 08:29 • 来自相关话题

1、和快手聊了之后才知道,传统搜索早变天了
https://mp.weixin.qq.com/s/xe6RYpYXNP2JKehL0kk8vg

2、Coco AI V0.9.0 数据权限管控体验
https://blog.csdn.net/yangmf20 ... 03075

3、浅谈 AI 搜索前端打字机效果的实现方案演进
https://my.oschina.net/vivotech/blog/18821045

4、如何使用证书认证连接 Easysearch
https://blog.csdn.net/yangmf20 ... 59952

5、Easysearch 跨集群复制(CCR)实战全攻略之 1——本地两集群间复制
https://mp.weixin.qq.com/s/wxB0fH7GHZGspKB9Rp7gtg

编辑:Fred
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2153期 (2025-11-27)

社区日报Se7en 发表了文章 • 0 个评论 • 6887 次浏览 • 2025-11-27 21:08 • 来自相关话题

1.伯克利等高校开源kvcached:KV缓存守护进程实现动态GPU共享,大幅提升GPU利用率,成本直降70%
https://mp.weixin.qq.com/s/3XvI8uzD0UUnTUJ03KjKHg
2.OceanBase 年度发布会 Hands-on AI Workshop 回顾
https://mp.weixin.qq.com/s/5ZuqJzngFqxLJBqxItn5Cg
3.Speculators:生产级训练投机解码的标准化方案
https://mp.weixin.qq.com/s/ndmaREajMMWu79dyZeJj1w
4.Ray symmetric-run:让 vLLM 多节点部署更轻盈
https://mp.weixin.qq.com/s/1cZtyTDr97qLZ40VfOQ5xw

编辑:Se7en
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2152期 (2025-11-26)

社区日报kin122 发表了文章 • 0 个评论 • 7350 次浏览 • 2025-11-26 10:16 • 来自相关话题

1. 与 Claude Anthropic 结合的 ES 工具代理(搭梯)
https://medium.com/%40marinell ... f5713

2. Elasticsearch 到本地 LLM0(搭梯)
https://medium.com/%40darkly_s ... f57e7

3. 使用 LLM、MCP 和 Ollama 通过自然语言查询 Elasticsearch
https://david-dudu-zbeda.mediu ... b7b43


编辑:kin122 
更多资讯:http://news.searchkit.cn